(de javaDefStaticFields (ClassObject Fields SimpleClass)
  (let (@Class (pack (java ClassObject "getName") )
        Fields (memberNames Fields "Static") )
    (if (thread ClassObject
          (java "isInterface")
          java)
      (if (functionalMethodName ClassObject)
        (def (staticMember SimpleClass "new")
          (curry (@Class) "Body"
            (functionalInterface @Class "Body") ) )
        (def (staticMember SimpleClass "new")
          (curry (@Class) @
            (pass 'interface @Class) ) ) )
      (when (thread ClassObject
              (java "getConstructors")
              arrayAsList
              car)
        (javaDefStaticConstructors ClassObject SimpleClass) ) )
    (def (staticMember SimpleClass "class") ClassObject)
    (def (staticMember SimpleClass "package")
      (java ClassObject "getPackage") )
    (for Field Fields
      (def (staticMember SimpleClass Field)
        (public @Class Field) ) ) ) )